package com.sxu.aicodehelper.ai;

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.response.ChatResponse;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class AiCodeHelper {

    @Resource
    // 推荐这样命名 和源码相同 减少冲突
    private ChatModel qwenChatModel;

    // 定义系统提示词
    private static final String SYSTEM_MESSAGE = """
            我是你的编程小助手，帮助用户解答编程学习和求职面试相关问题，并给出建议：
            1. 规划清晰的编程学习路线
            2. 提供项目学习建议
            3. 给出程序员求职全流程指南
            4. 分享高频面试题和面试技巧
            请用简洁易懂的语言回答，主力用户高效学习和求职
            """;

    // ai对话
    public String chat(String message){
        // 最好只包含一个系统消息，否则可能新的替换旧的
        SystemMessage systemMessage = SystemMessage.from(SYSTEM_MESSAGE);
        // 将消息封装为UserMessage
        UserMessage userMessage = UserMessage.from(message);
        // 调用模型向ai发送信息
        // 添加系统提示词
        ChatResponse chatResponse = qwenChatModel.chat(systemMessage, userMessage);
        // AiMessage封装ai回复的消息
        AiMessage aiMessage = chatResponse.aiMessage();
        log.info("AI输出：{}", aiMessage.toString());
        // 返回AI生成的实际文本
        return aiMessage.text();
    }

    /*
    * 支持多种媒体资源 自定义用户消息
    * */
    public String chatWithMessage(UserMessage userMessage){
        ChatResponse chatResponse = qwenChatModel.chat(userMessage);
        AiMessage aiMessage = chatResponse.aiMessage();
        log.info("AI输出：{}", aiMessage.toString());
        return aiMessage.text();
    }
}
